package org.jaaksi.kottlindemo.leak

import android.widget.TextView
import kotlin.concurrent.thread

object BannerAd {
    // 方法中的变量会在方法执行完销毁掉
    fun loadAd(view: TextView?) {
        view ?: return
        val view2 = view
        println(">> view1 = $view")
        view.text = "hahah"
        // 前面的操作不会造成泄漏

        // thread的操作会造成泄漏，由于thread生命>20000，activity回收时，thread依然持有view的引用（BannerAd$loadAd$thread$1.$view）
        // 如果在Activity回收的时候，线程已经结束了也不会泄漏，如这里2s
        thread {
            println(">> view2 = $view")
//            Thread.sleep(20000)
            Thread.sleep(2000)
        }
        // 内存泄漏的根本原因是在回收的时候，要被回收的对象仍然存在强引用指向它导致无法释放内存
    }


}